package dao;

import connection.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import model.Participantes;

/**
 *
 * @author juliana_carlos
 * Classe Esporte_imp implementa a classe Esporte_int.
 */
public class Participantes_imp implements Participantes_int {
    /**
     * Strings do Mysql utilizadas para criar, listar, atualizar, deletar e buscar.
     */
   
    /**
     * Comando utilizado para inserir dados na tabela participantes.
     */ 
    private final String create = "INSERT INTO tb_participantes(idpais,idevento) VALUES (?,?)";
    /**
     * Comando utilizado para listar todos os dados da tabela participantes.
     */
    private final String read   = "SELECT*FROM tb_participantes";
    /**
     * Comando utilizado para atualizar todos os dados da tabela participantes.
     */
    private final String update = "UPDATE tb_participantes SET idpais=?,idevento=? WHERE idparticipantes=?";
    /**
     * Comando utilizado para deletar os dados da tabela participantes através do idparticipantes.
     */
    private final String delete = "DELETE FROM tb_participantes WHERE idparticipantes=?";
    /**
     * Comando utilizado para buscar os dados da tabela participantes através do idparticipantes.
     */
    private final String search = "SELECT*FROM tb_participantes WHERE idparticipantes=?";
    /**
     * Variáveis utilizadas na classe.
     */
    private Connection con;
    private PreparedStatement stmt;
    private ArrayList<Participantes> espArray;
    private Participantes espModelo;
/**
 * Método utilizado para instânciar uma nova conexão.
 */
    public Participantes_imp() {
        try {
            con = new ConnectionFactory().getConnection();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
    }
/**
 * Método utilizado para criar os dados dos participantes(paises)do evento. Sempre que o método receber dados, 
 * ele será recebido através do parâmetro.
 * @param e, nome da variável do tipo Participantes.
 * 
 */
    @Override
    
    public void create(Participantes e) {
        try {
            stmt = con.prepareStatement(create);
            stmt.setInt(1, e.getIdpais());
            stmt.setInt(2, e.getIdevento());
            stmt.execute();
            stmt.close();
        } catch (SQLException ex) {
            /**
             * Mensagem de erro, caso não consiga inserir os participantes do evento.
             */
            JOptionPane.showMessageDialog(null, "Erro ao inserir participantes");
        }
    }
/**
 * Método utilizado para listar os dados dos participantes(paises)dos eventos.
 * @return o Array, utilizado para finalizar o método. 
 */
    @Override
 
    public ArrayList<Participantes> read() {
 /**
  * espArray está instânciando um Array.
  */
        espArray = new ArrayList<>();
        try {
            stmt = con.prepareStatement(read);
            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                espModelo = new Participantes();
                espModelo.setIdparticipantes(rs.getInt("participantes"));
                espModelo.setIdpais(rs.getInt("idpais"));
                espModelo.setIdevento(rs.getInt("idevento"));
                espArray.add(espModelo);
            }
        } catch (SQLException ex) {
            /**
             * Mensagem de erro, caso não consiga listar o participante do evento.
             */
            JOptionPane.showMessageDialog(null, "Erro ao listar participantes\n"+ex.getMessage());
        }
        return espArray;
    }
/**
 * Método utilizado para atualizar os dados dos participantes(paises)do evento. Sempre que o método receber dados, 
 * ele será recebido através do parâmetro.
 * @param e, nome da variável do tipo Participantes. 
 */
    @Override
    public void update(Participantes e) {
        try {
            stmt = con.prepareStatement(update);
            stmt.setInt(1, e.getIdparticipantes());
            stmt.setInt(2, e.getIdpais());
            stmt.setInt(3, e.getIdevento());
            stmt.execute();
            stmt.close();
        } catch (SQLException ex) {
            /**
             * Mensagem de erro, caso não consiga atualizar os participantes do evento. 
             */
            JOptionPane.showMessageDialog(null, "Erro ao atualizar participantes");
        }
    }
/**
 * Método utilizado para deletar os dados dos participantes(paises)do evento. Sempre que o método receber dados, 
 * ele será recebido através do parâmetro.
 * @param e, nome da variável do tipo Participantes. 
 */
    @Override
    public void delete(Participantes e) {
        try {
            stmt = con.prepareStatement(delete);
            stmt.setInt(1, e.getIdparticipantes());
            stmt.execute();
            stmt.close();
        } catch (SQLException ex) {
            /**
             * Mensagem de erro, caso não consiga deletar os participantes do evento. 
             */
            JOptionPane.showMessageDialog(null, "Erro ao deletar participantes");
        }
    }
/**
 * Método utilizado para buscar os dadosdos participantes(paises)do evento. Sempre que o método receber dados, 
 * ele será recebido através do parâmetro.
 * @param e, nome da variável do tipo Participantes. 
 * @return o Array, utilizado para finalizar o método.
 */
    @Override
    public ArrayList<Participantes> search(Participantes e) {
        /**
         * espArray está instânciando um Array.
         */
        espArray = new ArrayList<>();
        try {
            stmt = con.prepareStatement(search);
            stmt.setInt(1, e.getIdparticipantes());
            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                espModelo = new Participantes();
                espModelo.setIdparticipantes(rs.getInt("idparticipantes"));
                espModelo.setIdpais(rs.getInt("idpais"));
                espModelo.setIdevento(rs.getInt("idevento"));
                espArray.add(espModelo);
            }
        } catch (SQLException ex) {

            /**
             *  Mensagem de erro, caso não consiga listar os participantes do evento. 
             */
            JOptionPane.showMessageDialog(null, "Erro ao buscar participante");

        }
        return espArray;
    }
}
